/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siseventos.service;


import br.siseventos.dao.*;
import br.siseventos.model.*;
import br.siseventos.model.util.EnumHelper;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;

public class EventoService extends BaseService {

    // <editor-fold desc="Campos">
    private EventoDao eventoDao = new EventoDao();
    private ItemAvaliacaoEventoDao itemAvaliacaoEventoDao = new ItemAvaliacaoEventoDao();
    private PublicoEventoDao publicoEventoDao = new PublicoEventoDao();
    // </editor-fold>  
    // <editor-fold desc="Construtor">

    public EventoService() {
    }
    // </editor-fold>
    // <editor-fold desc="Servico">

    @Transactional
    public List<TbEvento> consultarPorNome(String nome, EnumHelper.FlagTipoConsulta tipoConsulta) throws Exception {
        return eventoDao.consultarPorNome(nome, tipoConsulta);
    }

    @Transactional
    public TbEvento consultar(int id) throws Exception {
        TbEvento r = null;
        try {
            r = eventoDao.consultar(id);
        } catch (Exception ex) {
            throw ex;
        }
        return r;
    }

    @Transactional
    public List<TbEvento> consultarPorStatus(EnumHelper.EnumStatusEvento[] statusEvento) throws Exception {
        return eventoDao.consultarPorStatus(statusEvento);
    }

    @Transactional
    public List<TbEvento> consultar(Date dataInicio, Date dataTermino) throws Exception {
        List<TbEvento> listaEventos = null;
        try {
            listaEventos = eventoDao.consultar(dataInicio, dataTermino);
        } catch (Exception ex) {
            throw ex;
        }
        return listaEventos;
    }

    @Transactional
    public List<TbEvento> consultarTodos() throws Exception {
        List<TbEvento> l = null;
        try {
            l = eventoDao.consultarTodos();
        } catch (Exception ex) {
            throw ex;
        }
        return l;
    }

    @Transactional
    public void incluir(TbEvento evento) throws Exception {
        try {
            // Cadastrar o evento na tabela de eventos
            evento.setDtaInclusaoEvento(new Date());
            eventoDao.incluir(evento);

        } catch (Exception e) {
            throw e;
        }
    }
    
    @Transactional
    public Long incluir(TbEvento evento, List<TbPublico> publicos, List<TdItemAvaliacao> itensAvaliacao) throws Exception{
        try {
            // Excluindo o evento da tabela de eventos
            evento.setDtaInclusaoEvento(new Date());
            evento.setPublicos(new HashSet<TbPublico>(publicos));
            evento.setItensAvaliacao(new HashSet<TdItemAvaliacao>(itensAvaliacao));
            return eventoDao.incluir(evento);
        } catch (Exception e) {
            throw e;
        }
    }

    @Transactional
    public void excluir(int id) throws Exception {
        try {
            // Excluindo o evento da tabela de eventos
            eventoDao.excluir(id);
        } catch (Exception e) {
            throw e;
        }
    }

    @Transactional
    public void alterar(TbEvento evento) throws Exception {
        try {
            // Alterando o evento na tabela de eventos
            eventoDao.alterar(evento);
        } catch (Exception e) {
            throw e;
        }
    }
    // </editor-fold> 
}
